package com.gexin.common.utils;

import com.gexin.controller.weixin.subscribe.SubscribeMessageKit;
import com.gexin.controller.weixin.subscribe.WxaSubscribeMessage;
import com.gexin.controller.weixin.subscribe.WxaSubscribeMessageApi;
import com.gexin.model.agent.Agent;
import com.gexin.model.weixin.WeixinAppConfig;
import com.gexin.model.weixin.WeixinUser;
import com.jfinal.kit.JsonKit;
import com.jfinal.log.Log;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.api.ApiResult;
import com.jfinal.weixin.sdk.api.TemplateData;
import com.jfinal.weixin.sdk.api.TemplateMsgApi;
import com.jfinal.wxaapp.WxaConfigKit;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.Set;

public class SendTemplateMessage {
	private Log log = Log.getLog(SendTemplateMessage.class);
	/**提现到账*/
	public static final String TIXIAN = "QPhXjcNOW72ZEA6nlGxR8mYgf1qEQb7xFK9Kghg_EOM";
	/**返利到账*/
	public static final String FANLI = "Qq9tHXlPtL4rE7KEB_Aim2EF_3QkG5Y56XGa_U7FJew";
	/**
	 * 代理经销商审核推送模板消息
	 * @param auditResult     审核结果
	 * @param agentName       商家名称
	 * @param content         内容
	 * @param parentAgentName 审核商家名称
	 * @param auditTime       审核时间
	 * @param openId          发送人openId
	 * @return
	 */
	public ApiResult sendAuditTemplateMsg(String auditResult , String agentName , String content , String parentAgentName , String auditTime , String openId) {
		WxaConfigKit.setWxaConfig(WeixinAppConfig.dao.findById(2).getWxaConfigs());//设置对应的微信小程序
		//根据openid 去查找用户
		WeixinUser user = WeixinUser.dao.getUserByOpentId(openId);
		if (user == null || user.getId() == null) {
			log.error("代理商审核推送消息 openid找数据 未找到！  openid ：" + openId);
			return null;
		}
		Boolean isOk = SubscribeMessageKit.api.subSubscribe(user.getId() , SubscribeMessageKit.Subscribe_Agent_Review_Message);
		if (isOk) {
			WxaSubscribeMessage t = new WxaSubscribeMessage();
			t.add("phrase1" , auditResult);//审核结果
			t.add("thing2" , agentName);//商家名称
			t.add("thing3" , content);//内容
			t.add("name4" , parentAgentName);//审核人
			t.add("date5" , auditTime);//审核时间
			t.setTemplate_id(SubscribeMessageKit.Subscribe_Agent_Review_Message);
			t.setTouser(openId);
			t.setPage("pages/my/my");//打开的页面
			WxaSubscribeMessageApi api = new WxaSubscribeMessageApi();
			ApiResult send = api.send(t);
			if (!send.isSucceed()) {//推送失败
				log.error("推送参数 t：" + JsonKit.toJson(t));
				log.error(" 代理商审核推送消息失败了！send：" + JsonKit.toJson(send));
			}
			return send;
		} else {
			log.info("代理商审核推送消息，推送失败，当前用户没有订阅消息");
			return null;
		}

	}


	/**
	 * 代理经销商推送用户下单模板消息
	 * @param orderId    订单编号
	 * @param userName   买家名称
	 * @param orderPrice 订单金额
	 * @param payTime    支付时间
	 * @param userPhone  用户电话
	 * @param openId     发送人openId
	 * @return
	 */
	public ApiResult sendSaveTemplateMsg(String orderId , String userName , String orderPrice , String payTime , String userPhone , String openId , BigDecimal price) {

		System.out.println(openId);
		WeixinUser userByOpentId = WeixinUser.dao.getUserByOpentId(openId);
		String unionid = userByOpentId.getUnionid();
		WeixinUser weixinUser = WeixinUser.dao.findGZHUserByUnionId(unionid);
		if (weixinUser == null || weixinUser.getId() == null) {
			log.error("用户下单推送代理商 openid找数据 未找到！  openid ：" + openId);
			return null;
		}
		ApiConfigKit.setThreadLocalAppId("wxb5f06f42fcae0701");
		ApiResult result = TemplateMsgApi.send(TemplateData.New()
				// 消息接收者
				.setTouser(weixinUser.getOpenid())
				// 模板id
				.setTemplate_id("_sA0s0cAFy_gx0nwtcFnjrJSPfoPhiKwCUBZaNTvdMQ")
				// 模板参数
				.add("first" , "您的新订单信息如下：" , "#999")
				.add("keyword1" , orderId , "#999")
				.add("keyword2" , payTime)
				.add("remark" , "收货人:" + userName + ",联系方式：" + userPhone + ",本单预计收入:" + (price == null ? new BigDecimal(0.00) : price.setScale(2 , BigDecimal.ROUND_HALF_UP)))
				.build());
		System.out.println("推送模板消息给代理商==============" + result);
		return result;
	}


	/**
	 * 代理经销商推送用户下单模板消息
	 * @param orderId    订单编号
	 * @param userName   买家名称
	 * @param orderPrice 订单金额
	 * @param payTime    支付时间
	 * @param userPhone  用户电话
	 * @param openId     发送人openId
	 * @return
	 */
	public ApiResult sendSaveTemplateMsg(String orderId , String userName , String orderPrice , String payTime , String userPhone , String openId) {

		System.out.println(openId);
		WeixinUser userByOpentId = WeixinUser.dao.getUserByOpentId(openId);
		String unionid = userByOpentId.getUnionid();
		WeixinUser weixinUser = WeixinUser.dao.findGZHUserByUnionId(unionid);
		if (weixinUser == null || weixinUser.getId() == null) {
			log.error("用户下单推送代理商 openid找数据 未找到！  openid ：" + openId);
			return null;
		}
		ApiConfigKit.setThreadLocalAppId("wxb5f06f42fcae0701");

		ApiResult result = TemplateMsgApi.send(TemplateData.New()
				// 消息接收者
				.setTouser(weixinUser.getOpenid())
				// 模板id
				.setTemplate_id("_sA0s0cAFy_gx0nwtcFnjrJSPfoPhiKwCUBZaNTvdMQ")
				// 模板参数
				.add("first" , "您有新的订单待处理" , "#999")
				.add("keyword1" , orderId , "#999")
				.add("keyword2" , payTime)
				.add("remark" , "收货人:" + userName + ",联系方式：" + userPhone)
				.build());
		System.out.println("推送模板消息给代理商==============" + result);
		return result;
	}
	/** 注册的模板id */
	public static final String sendSubmitRegisterTempalteId = "vB4XPnDSwKT7rry_xU1isyY6W2C72o8IZFJ50gyduqY";



	public static final String auditTemplateMessage = "42pBvHhToMjKpf39AA01JguxXYQndooh4h6GwvmL3Zc";
	/**
	 * 提交注册
	 * @return
	 */
	public ApiResult sendSubmitRegister( String openId){
		WeixinUser userByOpentId = WeixinUser.dao.getUserByOpentId(openId);
		String unionid = userByOpentId.getUnionid();
		WeixinUser weixinUser = WeixinUser.dao.findGZHUserByUnionId(unionid);
		if (weixinUser == null || weixinUser.getId() == null) {
			log.error("用户下单推送代理商 openid找数据 未找到！  openid ：" + openId);
			return null;
		}
		ApiConfigKit.setThreadLocalAppId("wxb5f06f42fcae0701");
		Agent agent = Agent.dao.findInfoByUserIdALL(weixinUser.getId());
		if(agent==null||agent.getAgentPhone()==null){
			log.error("代理商用户不存在  openid ：" + openId);
			return null;
		}
		ApiResult result = TemplateMsgApi.send(TemplateData.New()
				// 消息接收者
				.setTouser(weixinUser.getOpenid())
				// 模板id
				.setTemplate_id(sendSubmitRegisterTempalteId)
				// 模板参数
				.add("first" , "尊敬的客户，您已提交注册中科易购 xxx 地区 xx  经销商，稍后会有本公司客服拨打您的电话核对注册信息，确认信息无误后程序将开始生效。" , "#999")
				.add("keyword1" , weixinUser.getNickname() , "#999")
				.add("keyword2" ,agent.getAgentPhone() )
				.add("keyword3" , new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(agent.getCreateTime()))
				.add("remark","感谢你的使用。")
				.build());
		System.out.println("推送模板消息给代理商==============" + result);
		return result;
	}


	private static final String appId="wxb5f06f42fcae0701";

	/**
	 * 发送模板消息
	 * @param tempalteId 模板消息ID
	 * @param openId 发送的openId
	 * @param parm 参数map
	 * @return
	 */
	public ApiResult sendTemplate(String tempalteId,String openId , Map<String,String> parm){
		ApiConfigKit.setThreadLocalAppId(appId);
		TemplateData templateData = TemplateData.New().setTouser(openId).setTemplate_id(tempalteId);
		Set<Map.Entry<String, String>> entries = parm.entrySet();
		for (Map.Entry<String, String> entry : entries) {
			templateData.add(entry.getKey(),entry.getValue());
		}
		String build = templateData.build();
		ApiResult result = TemplateMsgApi.send(build);
		return result;
	}
}



